double之间的加减乘除运算不能直接进行,需要运用BigDecimal进行转换。 | 您所在的位置:网站首页 › c语言 double取模运算 › double之间的加减乘除运算不能直接进行,需要运用BigDecimal进行转换。 |
double类型之间的运算不能直接使用Double来直接进行运算:因为计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。 在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。 在使用BigDecimal类来进行计算的时候,主要分为以下步骤: 1、用float或者double变量构建BigDecimal对象。 2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。 3、把BigDecimal对象转换成float,double,int等类型。进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。 下面是一个工具类,该工具类提供加,减,乘,除运算。 public class Arith { public static double add(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } // 进行减法运算 public static double sub(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.subtract(b2).doubleValue(); } // 进行加法运算 public static double mul(double d1, double d2){ // 进行乘法运算 BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.multiply(b2).doubleValue(); } // 进行除法运算 public static double div(double d1,double d2,int len) {// 进行除法运算 BigDecimal b1 = new BigDecimal(d1); BigDecimal b2 = new BigDecimal(d2); return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue(); } // 进行四舍五入操作 public double round(double d,int len) { // 进行四舍五入操作 BigDecimal b1 = new BigDecimal(d); BigDecimal b2 = new BigDecimal(1); // 任何一个数字除以1都是原数字 // ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作 return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP).doubleValue(); } }示例: public static void main(String[] args) throws IllegalAccessException { // TODO Auto-generated method stub double a = 1.0; double b = 0.3; double c = a-b; System.out.println(c); System.out.println("-------------"); System.out.println(a+"和"+b+"相减:"+ Arith.sub(a, b)); System.out.println(a+"和"+b+"相加:"+ Arith.add(a, b)); System.out.println(a+"和"+b+"相乘:"+ Arith.mul(a, b)); System.out.println(a+"和"+b+"相除:"+ Arith.div(a,b,3)); // System.out.println(div(1.0,0.3, 3)); }结果输出为: |
CopyRight 2018-2019 实验室设备网 版权所有 |